package com.vadmin.vadminjava.common;

import java.math.BigDecimal;
import java.math.RoundingMode;

public class BigDecimalUtils {


    private BigDecimalUtils() {
    }

    /**
     * 将数据转换为BigDecimal
     *
     * @param obj
     * @return
     */
    public static BigDecimal parseToBigDecimal(Object obj) {
        if (obj == null) return BigDecimal.ZERO;
        return new BigDecimal(String.valueOf(obj));
    }

    /**
     * 按精度向上取整
     *
     * @param obj
     * @param scale
     * @return
     */
    public static BigDecimal roundUp(Object obj, int scale) {
        return parseToBigDecimal(obj).setScale(scale, BigDecimal.ROUND_UP);
    }

    /**
     * 按精度向下取整
     *
     * @param obj
     * @param scale
     * @return
     */
    public static BigDecimal roundDown(Object obj, int scale) {
        return parseToBigDecimal(obj).setScale(scale, BigDecimal.ROUND_DOWN);
    }


    /**
     * 按精度四舍五入
     *
     * @param obj
     * @param scale
     * @return
     */
    public static BigDecimal roundHalfUp(Object obj, int scale) {
        return parseToBigDecimal(obj).setScale(scale, BigDecimal.ROUND_HALF_UP);
    }


    /**
     * 相加
     *
     * @param obj
     * @param obj2
     * @return
     */
    public static BigDecimal add(Object obj, Object obj2) {

        return parseToBigDecimal(obj).add(parseToBigDecimal(obj2));

    }


    /**
     * 相减
     *
     * @param obj
     * @param obj2
     * @return
     */
    public static BigDecimal sub(Object obj, Object obj2) {
        return parseToBigDecimal(obj).subtract(parseToBigDecimal(obj2));
    }

    /**
     * 相乘
     *
     * @param obj
     * @param obj2
     * @return
     */
    public static BigDecimal mul(Object obj, Object obj2) {
        return parseToBigDecimal(obj).multiply(parseToBigDecimal(obj2));
    }


    /**
     * 相除
     *
     * @param obj
     * @param obj2
     * @return
     */
    public static BigDecimal div(Object obj, Object obj2) {
        return parseToBigDecimal(obj).divide(parseToBigDecimal(obj2), 20, RoundingMode.HALF_DOWN);
    }


}
